package com.aaa.vegetablemarketexpress.dao;

import com.aaa.vegetablemarketexpress.entity.*;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

@Mapper
public interface OrderDao {

    /**
     * 插入订单主表
     * @param order 订单信息
     * @return 插入结果
     */
    int insertOrder(Order order);

    /**
     * 更新订单状态
     * @param order 订单信息
     * @return 更新结果
     */
    int updateOrderStatus(Order order);
    /**
     * 根据用户ID查询客户（商家）信息
     * @param userId 用户ID
     * @return 客户（商家）信息
     */
    Customer selectCustomerByUserId(@Param("userId") Long userId);
    /**
     * 查询客户（商家）的订单列表
     * @param customerId 客户（商家）ID
     * @return 订单列表
     */
    List<Order> selectCustomerOrders(@Param("customerId") Long customerId);




    /**
     * 查询商家店铺的订单列表
     * @param userId 用户ID（商家的用户ID）
     * @return 订单列表
     */
    List<Order> selectShopOrders(@Param("userId") Long userId);

    /**
     * 根据用户ID查询商家信息
     * @param userId 用户ID
     * @return 商家信息
     */
    Shop selectShopByUserId(@Param("userId") Long userId);


    /**
     * 根据订单编号查询订单操作记录列表
     * @param orderNo 订单编号
     * @return 订单操作记录列表
     */
    List<OrderAct> selectOrderActsByOrderNo(@Param("orderNo") String orderNo);

    /**
     * 查询用户订单列表
     * @param userId 用户ID
     * @return 订单列表
     */
    List<Order> selectUserOrders(@Param("userId") Long userId);

    /**
     * 根据订单ID查询订单
     * @param orderId 订单ID
     * @return 订单信息
     */
    Order selectOrderById(@Param("orderId") Long orderId);

    /**
     * 更新订单
     * @param order 订单信息
     * @return 更新结果
     */
    int updateOrder(Order order);

    /**
     * 根据订单ID查询订单编号
     * @param orderId 订单ID
     * @return 订单编号
     */
    String selectOrderNoById(@Param("orderId") Long orderId);


    /**
     * 获取订单趋势数据
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 趋势数据列表
     */
    @MapKey("date")//解释：Map的key为指定的字段，value为字段的值
    List<Map<String, Object>> selectOrderTrendData(@Param("startDate") Date startDate,
                                                   @Param("endDate") Date endDate);

    /**
     * 获取订单状态统计
     * @return 状态统计数据
     */
    @MapKey("status")
    List<Map<String, Object>> selectOrderStatusStats();

    /**
     * 获取商品销售排行
     * @param limit 限制数量
     * @return 商品销售排行
     */
    @MapKey("productId")
    List<Map<String, Object>> selectProductSalesRanking(@Param("limit") int limit);

    /**
     * 根据订单编号查询订单
     * @param orderNo 订单编号
     * @return 订单信息
     */
    Order selectOrderByOrderNo(String orderNo);




}
